﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;

namespace NHAHANGLIENHOACHAY_WS_DAO_DTO
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        private db_QLNH3Entities db = new db_QLNH3Entities();

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
        //_____________Quản lý bàn_________________________________________

        [WebMethod]
        public List<BAN> LayDSBan()
        {
            return db.BANs.ToList();

        }
        [WebMethod]
        public KHUVUC LayKhuVucTheoMaBan(int maban)
        {
            KHUVUC dto=new KHUVUC();
            var query = from c in db.BANs
                        join v in db.KHUVUCs
                        on c.KHUVUC.MaKhuVuc equals v.MaKhuVuc
                        where c.MaBan==maban
                        select new {v.MaKhuVuc,v.TenKhuVuc,v.MucGiaChenhLech };
            foreach (var b in query)
            {
                dto.MaKhuVuc = b.MaKhuVuc;
                dto.TenKhuVuc = b.TenKhuVuc;
                dto.MucGiaChenhLech = b.MucGiaChenhLech;
            }
            return dto;
        }
        [WebMethod]
        public List<BAN> LayDSBanTheoMaKhuVuc(int makv)
        {           
            List<BAN> list = new List<BAN>();          
            var query = from c in db.BANs
                        join v in db.KHUVUCs
                        on c.KHUVUC.MaKhuVuc equals v.MaKhuVuc
                        select new { c.MaBan,c.TenBan,c.TrangThai,v.MaKhuVuc };
            var result = query.Where(c => c.MaKhuVuc == makv).ToList();           
            if (result != null)
            {
                foreach (var c in result)
                {                   
                    BAN dto = new BAN();
                    dto.MaBan = c.MaBan;                  
                    dto.TrangThai = c.TrangThai;
                    dto.TenBan = c.TenBan;                   
                    list.Add(dto);
                }
            }
            else
            {
                
            }
           
            return list;
                     
        }
        [WebMethod]
        public bool ThemBan(BAN dto ,int makhuvuc)
        {          
            var khuvuc = db.KHUVUCs.Where(c => c.MaKhuVuc == makhuvuc).FirstOrDefault();//Lay khu vuc dua vao cái mả khu vực truyền vào
            if (khuvuc != null)
            {
                khuvuc.BANs.Add(dto);
                db.SaveChanges();
                return true;                
            }
            else
            {
                return false;
            }
 
        }
        [WebMethod]
        public bool XoaBan(int maban)
        {
            var ban = db.BANs.Where(c => c.MaBan == maban).FirstOrDefault();
            if (ban != null)
            {
                db.DeleteObject(ban);
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }
        }
        [WebMethod]
        public bool CapNhatBan(BAN dto,int makhuvuc)
        {            
            var khuvuc = db.KHUVUCs.Where(c => c.MaKhuVuc == makhuvuc).FirstOrDefault();
            var ban = db.BANs.Where(c => c.MaBan == dto.MaBan).FirstOrDefault();

            if (ban != null)
            {
                ban.TenBan = dto.TenBan;
                ban.TrangThai =dto.TrangThai;              
                ban.KHUVUC = khuvuc;
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }  

        }
        //__________Quản lý khu vực_________________________________________,,
        [WebMethod]
        public List<KHUVUC> LayDSKhuVuc()
        {
            return db.KHUVUCs.ToList();

        }
        [WebMethod]
        public bool ThemKhuVuc(KHUVUC dto,int maht)
        {
            //Dau tien chon cai hinhthuckn==2 trong cai db                    
            var hinhthuckd = db.HINHTHUCKDs.Where(c => c.MaHinhThucKD == maht).FirstOrDefault();//Lấy phần tử đầu tiên trả về null nếu như dảy rổng
            if (hinhthuckd != null)
            {
                hinhthuckd.KHUVUCs.Add(dto);
                db.SaveChanges();
                return true;

            }
            else
            {
                return false;
            }     
           
        }
        [WebMethod]
        public bool XoaKhuVuc(int makv)
        {
           
            var khuvuc = db.KHUVUCs.Where(c => c.MaKhuVuc == makv).FirstOrDefault();
            if (khuvuc != null)
            {
                db.DeleteObject(khuvuc);
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }
        }
        [WebMethod]
        public bool CapNhatKhuVuc(KHUVUC dto,int mahinhthuckd)
        {         
            var khuvuc = db.KHUVUCs.Where(c => c.MaKhuVuc == dto.MaKhuVuc).FirstOrDefault();
            var hinhthuckd = db.HINHTHUCKDs.Where(b => b.MaHinhThucKD == mahinhthuckd).FirstOrDefault();//Lấy phần tử đầu tiên trả về null nếu như dảy rổng
            if (khuvuc != null)
            {
                khuvuc.TenKhuVuc = dto.TenKhuVuc;
                khuvuc.MucGiaChenhLech = dto.MucGiaChenhLech;
                khuvuc.HINHTHUCKD = hinhthuckd;
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }
        }
        //___________Hỉnh Thức Kinh Doanh________________________________________________

        [WebMethod]
        public HINHTHUCKD LayHinhThucKinhDanhTheoKV(int makv)
        {
            HINHTHUCKD dto = new HINHTHUCKD();
            var query = from c in db.KHUVUCs
                        join v in db.HINHTHUCKDs
                        on c.HINHTHUCKD.MaHinhThucKD equals v.MaHinhThucKD
                        where c.MaKhuVuc ==makv
                        select new { v.MaHinhThucKD, v.TenHinhThucKD };
            foreach (var c in query)
            {
               dto.MaHinhThucKD=c.MaHinhThucKD;
               dto.TenHinhThucKD = c.TenHinhThucKD;              

            }
            return dto;
        }
        [WebMethod]
        public List<HINHTHUCKD> LayDSHinhThucKinhDanh()
        {
            return db.HINHTHUCKDs.ToList();
        }
        //______________Quản Lý Món Ăn___________________________________________________
        [WebMethod]
        public bool ThemMonAn(MONAN dto,int maloaima)
        {
            var loaimonan = db.LOAIMONANs.Where(c => c.MaLoaiMonAn == maloaima).FirstOrDefault();
            if (loaimonan != null)
            {
                loaimonan.MONANs.Add(dto);
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }
 
        }
        [WebMethod]
        public bool XoaMonAn(int mama)
        {
            var monan = db.MONANs.Where(c => c.MaMonAn == mama).FirstOrDefault();
            if (monan != null)
            {
                db.DeleteObject(monan);
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }
        }
        [WebMethod]
        public MONAN LayMonAnTheoMa(int mama) 
        {
            return db.MONANs.Where(c => c.MaMonAn == mama).FirstOrDefault();
        }
        //Lay danh sách món ăn theo loại món ăn
        [WebMethod]
        public DataTable LayDSMonAnCoLoaiMonAn()
        {       

            DataTable dt = new DataTable();
            dt.Columns.Add("TenMonAn", typeof(string));
            dt.Columns.Add("MaMonAn", typeof(string));
            dt.Columns.Add("DonVi ", typeof(string));
            dt.Columns.Add("ThanhTien", typeof(string));
            dt.Columns.Add("TenLoaiMon", typeof(string));
            var query = from c in db.MONANs
                        join v in db.LOAIMONANs
                        on c.LOAIMONAN.MaLoaiMonAn equals v.MaLoaiMonAn
                        select new { c.TenMonAn, c.MaMonAn, c.DonVi,c.GiaTien, v.TenLoaiMonAn };
            //Duyệt cái query để lấy danh sách các list                    
            foreach (var c in query)
            {                
                dt.Rows.Add(c.TenMonAn,c.MaMonAn,c.DonVi,c.GiaTien,c.TenLoaiMonAn);            
                
            }
            return dt;
        }
        [WebMethod]
        public LOAIMONAN LayLoaiMonAnTheoMaMonAn(int mama)
        {
            LOAIMONAN dt=new LOAIMONAN();
            var query = from c in db.MONANs
                        join v in db.LOAIMONANs
                        on c.LOAIMONAN.MaLoaiMonAn equals v.MaLoaiMonAn
                        where c.MaMonAn==mama
                        select new { v.MaLoaiMonAn, v.TenLoaiMonAn };
            foreach (var c in query)
            {
                dt.MaLoaiMonAn = c.MaLoaiMonAn;
                dt.TenLoaiMonAn = c.TenLoaiMonAn;               
            }
            return dt;
        }
        [WebMethod]
        public List<MONAN> LayDSMonAn()
        {
            return db.MONANs.ToList();
        }
        //QUẢN LÝ LOẠI MÓN ĂN
        //Lấy danh sách loại món ăn
        [WebMethod]
        public List<LOAIMONAN> LayDSLoaiMonAn()
        {
            return db.LOAIMONANs.ToList();
        }
        //Thêm loại món ăn
        [WebMethod]
        public bool ThemLoaiMonAn(LOAIMONAN dto)
        {
            if (dto != null)
            {
                db.AddToLOAIMONANs(dto);
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
 
            }
 
        }
        //Xóa loại món ăn
        [WebMethod]
        public bool XoaLoaiMonAn(LOAIMONAN dto)
        {

            var loaimonan = db.LOAIMONANs.Where(c => c.MaLoaiMonAn == dto.MaLoaiMonAn).FirstOrDefault();
            if (loaimonan != null)
            {
                db.DeleteObject(loaimonan);
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }
        }
        [WebMethod]
        public List<MONAN> LayDSMonAnTheoMaLoai(int maloai)
        {           
            List<MONAN> list = new List<MONAN>();
            var query = from c in db.MONANs
                        join v in db.LOAIMONANs
                        on c.LOAIMONAN.MaLoaiMonAn equals v.MaLoaiMonAn
                        select new { c.MaMonAn,c.TenMonAn,c.GiaTien,c.DonVi,v.MaLoaiMonAn };
            var result = query.Where(c => c.MaLoaiMonAn == maloai).ToList();           
            if (result != null)
            {
                foreach (var c in result)
                {
                    
                    MONAN dto = new MONAN();
                    dto.MaMonAn = c.MaMonAn;
                    dto.TenMonAn = c.TenMonAn;
                    dto.GiaTien = c.GiaTien;
                    dto.DonVi = c.DonVi;                   
                    list.Add(dto);
                }
            }
            else
            {

            }

            return list;

        }
        //--Quản lý phiếu đặt món --________________________________________________
        [WebMethod]
        public List<LOAIPHIEUDAT> LayDSLoaiPhieu()
        {
            return db.LOAIPHIEUDATs.ToList();
        }
        //--Quản lý hóa đơn
        [WebMethod]
        public List<HOADON> LayDSHoaDon()
        {
            return db.HOADONs.ToList();
        }
        [WebMethod]
        //Tim ma hoa đơn cuối cùng trong bảng hóa đơn
        public HOADON LayMaHoaDon()
        {
            HOADON dto = new HOADON();          
            dto = db.HOADONs.OrderByDescending(m => m.MaHoaDon).FirstOrDefault();
            return dto;
          
        }
        [WebMethod]
        public bool ThemHoaDon( HOADON dto)
        {
         
            if (dto != null)
            {
                db.AddToHOADONs(dto);
                db.SaveChanges();
                return true;

            }
            else
            {
                return false;
            }
 
        }
        //--Quản lý chi tiết hóa đơn
        [WebMethod]
        public List<CTHOADON> LayDSChiTietHoaDonTheoMaBan(int maban)
        {
            List<CTHOADON> list = new List<CTHOADON>();
            var query = from c in db.CTHOADONs
                        join v in db.BANs
                        on c.BAN.MaBan equals v.MaBan
                        select new { c.MaBan, c.MaHoaDon, c.MaMonAn, c.TenMonAn,c.SoLuong,c.GiaTien, c.DonVi };
            var result = query.Where(c => c.MaBan == maban).ToList();
            if (result != null)
            {
                foreach (var c in result)
                {

                    CTHOADON dto=new CTHOADON();
                   // dto = c;
                    dto.MaHoaDon = c.MaHoaDon;
                    dto.MaBan = c.MaBan;
                    dto.MaMonAn = c.MaMonAn;
                    dto.TenMonAn = c.TenMonAn;
                    dto.SoLuong = c.SoLuong;
                    dto.DonVi = c.DonVi;
                    list.Add(dto);
                }
            }
            else
            {

            }
            return list;
        }
        [WebMethod]
        public List<CTHOADON> LayDSChiTietHoaDon()
        {
            return db.CTHOADONs.ToList();
        }
        [WebMethod]
        public bool ThemChiTietHoaDon(CTHOADON dto)
        {
            var ban = db.BANs.Where(c => c.MaBan==dto.MaBan).FirstOrDefault();
            var hoadon = db.HOADONs.Where(c => c.MaHoaDon == dto.MaHoaDon).FirstOrDefault();
            var monan = db.MONANs.Where(c => c.MaMonAn == dto.MaMonAn).FirstOrDefault();
            
            if (ban != null&& hoadon!=null&&monan!=null)
            {
                ban.CTHOADONs.Add(dto);
                hoadon.CTHOADONs.Add(dto);
                monan.CTHOADONs.Add(dto);               
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
 
            }
 
        }
        [WebMethod]
        public List<NGUOIDUNG> LayDSNguoiDung()
        {
            return db.NGUOIDUNGs.ToList();
        }
    }
}
